package com.hww.common.util;

import java.nio.ByteBuffer;

/**
 * @author hww
 * @date 2019-05-23.
 * email：
 * description： ByteBuffer与byte相互转换
 */
public class ByteBufferByteUtil {

    /**
     * 将字节数组包装为ByteBuffer（默认写模式）
     *
     * @param bytes 源字节数组（允许null值）
     * @return 包含全部数据的ByteBuffer，返回后处于可读模式（position=0，limit=容量）
     */
    public static ByteBuffer asByteBuffer(byte[] bytes) {
        if (null == bytes) {
            return null;
        }
        // 堆内存分配
        ByteBuffer byteBuffer = ByteBuffer.allocate(bytes.length);
        // 重置position=0，limit=capacity（准备写入）
        byteBuffer.clear();
        // 将数组数据写入缓冲区
        byteBuffer.put(bytes, 0, bytes.length);
        return byteBuffer;
    }


    /**
     * 从ByteBuffer提取剩余字节数据（remaining()范围）
     *
     * @param buffer 源缓冲区（需处于读模式）
     * @return 当前position到limit间的数据副本
     */
    public static byte[] asByte(ByteBuffer buffer) {
        if (null == buffer) {
            return null;
        }
        buffer.mark(); // 记录当前position
        byte[] bytes = new byte[buffer.remaining()];
        buffer.get(bytes);
        buffer.reset(); // 恢复原始position
        return bytes;
    }
}
